#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#include "pthread.h"

// 定义缓冲区 读/写缓冲区
typedef struct
{
    unsigned char *ptr; // 缓冲区指针
    int size;  // 缓冲区大小
    int len;   // 缓冲区已使用长度
} SubBuffer_t;

// 创建缓冲区
typedef struct
{
    SubBuffer_t *subBuffer[2]; // 读/写缓冲区
    int read_index;         // 读缓冲区索引
    int write_index;        // 写缓冲区索引
    pthread_mutex_t read_lock;
    pthread_mutex_t write_lock;
} Buffer_t;

/**
 * @brief 初始化一个缓冲区
 *
 * @param size 大小
 * @return Buffer_t*
 */
Buffer_t *app_buffer_init(int size);

/**
 * @brief 释放缓冲区
 *
 * @param buffer
 */
void app_buffer_free(Buffer_t *buffer);

/**
 * @brief 写入数据
 *
 * @param buffer 写入的缓冲区
 * @param data   写入的数据
 * @param len    写入的长度
 * @return int  成功与否
 */
int app_buffer_write(Buffer_t *buffer, char *data, int len);

/**
 * @brief 读取数据
 *
 * @param buffer 读取的缓冲区
 * @param data_buf 读取的数据
 * @param buf_size 缓冲区大小
 * @return int  读到的数据
 */
int app_buffer_read(Buffer_t *buffer, char *data_buf, int buf_size);

#endif /* __APP_BUFFER_H__ */
